package main

import "fmt"

//指针的使用
/*
	1.定义指针变量
	2.为指针变量进行赋值
	3.访问指针变量中的地址所指向的值
*/
func main() {
	//声明普通变量
	var a int = 10
	fmt.Printf("a变量的值：%d\n", a)
	fmt.Printf("a变量的地址为：%p\n", &a)

	//声明指针变量，指向了a，指针其实就是一个特殊变量
	//定义变量格式 var ptr *类型
	var ptr *int
	//ptr = new(int)
	ptr = &a //为指针变量
	fmt.Println(ptr)
	fmt.Printf("ptr的变量存储地址： %p\n", ptr)
	fmt.Printf("ptr的指针变量地址： %p\n", &ptr)
	fmt.Printf("ptr的指针变量地址： %d\n", *ptr)

	//指针的指针，也就是可以理解为指针指向指针，指针作为一种类型
	//*第一个表示是指针类型，*int是这个指针是什么类型的指针
	var ptr1 **int
	ptr1 = &ptr
	fmt.Printf("ptr1变量存储的指针的地址：%p\n", ptr1)
	fmt.Printf("ptr1变量指针自己的地址：%p\n", &ptr1)
	fmt.Printf("*ptr1变量存储的地址：%p\n", *ptr1)
	fmt.Printf("*ptr1变量存储的地址中的值：%d\n", **ptr1)
	//修改原本变量的方式将会有很多种
	**ptr1 = 20
	fmt.Println(**ptr1)
	fmt.Println(*ptr)
	fmt.Println(a)
}
